<?php
/**
 * Abstract Factory Pattern Interface
 * 
 * interface for the Abstract Factory Pattern. 
 *
 * @author		a.buis <a.buis@xs4all.nl>
 */
interface Application_Model_Factory_FactoryInterface
{
	/**
	 * Assign the Factory instances used for this factory.
	 * @param Application_Model_Factory_FactoryInterface $factory
	 */
	public static function setFactory (Application_Model_Factory_FactoryInterface $factory);
	/**
	 * Retreive the assigned Factory instance assigned through setFactory().
	 * @return Application_Model_Factory_FactoryInterface
	 */
	public static function getFactory ();
	/**
	 * Dynamicly get a method through a string parameter, if this method was not found within the factory's method list an 
	 * Exception will be thrown.
	 * @throws Application_Model_Factory_FactoryException Thrown if method was not found within factory.
	 * @param string $method
	 * @param array $arguments
	 */
	public function get ($method, array $arguments = array());
}